<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=\, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        let promise = new Promise((resolve,reject)=>{
            if(1){
                resolve('test resolve');
            }else{
                reject('err');
            }
        })
        promise.then(data=>{
            console.log(data);
        })
        
        let promise1 = new Promise((resolve,reject)=>{
            if(1){
                resolve('test resolve');
            }else{
                reject('err1');
            }
        })
        console.log(promise);
        console.dir(Promise);

        // Promise构造函数自身上的方法
        // resolve
        // Promise.resolve  作用是将现有的对象转换为promise对象,为成功状态（fulfilled）
        // 'xiaowangzi'
        let p = Promise.resolve('xiaowangzi');
        console.log(p);
        /* p.then(data=>{
            console.log(data);
        }) */
        let p1 = Promise.resolve({
            name:'韩威臣',
            age:18
        })
       /*  console.log(p1);
        p1.then(data=>{
            console.log(data);
        }) */
        // 基本数据类型和普通对象使用Promise.resolve进行转换，转换为promise对象，默认为成功状态，.then中接收的值即该数据
        // 特殊情况 thenable对象
     /*    let obj = {
            name:'yy',
            then(resolve,reject){
                resolve('xx');
            }
        } */
       /*  let obj1 = {
            then:function(resolve,reject){
                resolves('yy');
            }
        } */
        // let p2 = Promise.resolve(obj);
        /* p2.then(data=>{
            console.log(data);
        }) */
        /* thenable通过Promise.resolve进行转换，为promise对象时，成功状态的值为thenable对象中的resolve的值 */

        // Promise.reject()返回一个promise对象，该实例对象的状态为rejected
        // let p3 = Promise.reject('失败');
       /*  p3.catch(err=>{
            console.log(err);
        })  */
        /* let p4 = Promise.reject({
            name:'失败'
        })
        p4.catch(err=>{
            console.log(err);
        }) */
        /* let p5 = Promise.reject({
            catch(resolve,reject){
                reject('shibai');
            }
        })
        p5.catch(err=>console.log(err)); */

        // promise p p1 是promise对象
        let  obj = {
            name:'tom'
        }
        // Promise.all()  可以将多个promise实例对象 包装成一个promise实例对象  参数为数组
        const b1 = Promise.all([promise,p,p1,promise1,obj]);
        console.log(b1);
        b1.then(data=>{
            console.log(data);
        })
        b1.catch(err=>{
            console.log(err);
        })
        // Promise.all() 当包装的所有promise对象都是成功状态，返回的新的promise就是成功状态，成功的值为数组，数组中的值为其他promise成功状态的值，当其中有一个是失败状态，则b1的值为失败状态的值

        // Promise.resolve()将非promise对象转换为promise对象


        // Promise.race() 接收一个数组为参数，返回一个新的promise对象，数组内的多个promise对象，谁执行的快，最先得到结果b2的结果就是谁
        const b2 = Promise.race([promise,p,p1,promise1,obj]);
        b2.then(data=>{
            console.log(data);
        })

    </script>
</body>
</html>